
#ifndef TouchPanel_h
#define TouchPanel_h

#include <Typedef.h>
#include <Defines.h>
#include <CSharpGarbagePointer.h>
#include <CSharpPropertyMethods.h>

#include <System/Object.h>
#include <System/IntPtr.h>

#include <Riccsson/Xna/Framework/DisplayOrientation.h>
#include <Riccsson/Xna/Framework/Input/Touch/GestureType.h>
#include <Riccsson/Xna/Framework/Input/Touch/GestureSample.h>
#include <Riccsson/Xna/Framework/Input/Touch/TouchPanelCapabilities.h>
#include <Riccsson/Xna/Framework/Input/Touch/TouchCollection.h>

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
			namespace Input
			{
				namespace Touch
				{
					// Summary:
					//     Provides methods for retrieving touch panel device information. Reference
					//     page contains links to related code samples.
					class TouchPanel sealed : public Riccsson::System::Object
					{
					private: TouchPanel() {}
						 
						public: PROP3_STATIC(TouchPanel, int, DisplayHeight);
						public: PROP3_STATIC(TouchPanel, DisplayOrientation, displayOrientation);
						public: PROP3_STATIC(TouchPanel, int, DisplayWidth);
						public: PROP3_STATIC(TouchPanel, GestureType, EnabledGestures);
						public: PROP3GET_STATIC(TouchPanel, bool, IsGestureAvailable);
						public: PROP3_STATIC(TouchPanel, Riccsson::System::IntPtr, WindowHandle);

						// Summary:
						//     Gets or sets the display height of the touch panel.
						public: static PROP3_GET(int, DisplayHeight);
						public: static PROP3_SET(int, DisplayHeight);

						//
						// Summary:
						//     Gets or sets the display orientation of the touch panel.
						public: static PROP3_GET(DisplayOrientation, displayOrientation);
						public: static PROP3_SET(DisplayOrientation, displayOrientation);

						//
						// Summary:
						//     Gets or sets the display width of the touch panel.
						public: static PROP3_GET(int, DisplayWidth);
						public: static PROP3_SET(int, DisplayWidth);

						//
						// Summary:
						//     Gets or sets the gestures that are enabled for the touch panel. Reference
						//     page contains links to related code samples.
						public: static PROP3_GET(GestureType, EnabledGestures);
						public: static PROP3_SET(GestureType, EnabledGestures);

						//
						// Summary:
						//     Used to determine if a touch gesture is available. Reference page contains
						//     links to related code samples.
						public: static PROP3_GET(bool, IsGestureAvailable);

						//
						// Summary:
						//     The window handle of the touch panel.
						public: static PROP3_GET(Riccsson::System::IntPtr, WindowHandle);
						public: static PROP3_SET(Riccsson::System::IntPtr, WindowHandle);

						// Summary:
						//     Gets the touch panel capabilities for an available device. Reference page
						//     contains links to related code samples.
						public: static TouchPanelCapabilities GetCapabilities();

						//
						// Summary:
						//     Gets the current state of the touch panel. Reference page contains links
						//     to related code samples.
						public: static TouchCollection GetState();

						//
						// Summary:
						//     Reads an available gesture on the touch panel. Reference page contains links
						//     to related code samples.
						public: static GestureSample ReadGesture();
					};
				}
			}
		}
	}
}

#endif